As computer processing and related technologies continue to evolve, memory and storage requirements continue to increase. Where once a few thousand bytes of memory could sufficiently handle an operating system and related processes, now many gigabytes of memory may be required in some complex processing systems. Furthermore, in some systems, the addition of memory may also be accompanied by additional processors and processor related hardware. As such, the complexity of these systems requires efficient and flexible memory configuration schemes.
Conventional computer systems manage memory in terms of blocks. Memory blocks are generally divided into a number of pages in accordance with operating system parameters. Page sizes are typically selected in 2n byte increments. At least some pages may be configured as per-page data structures (PPDS) that contain information related to configured memory blocks (e.g. pages). Conventional per-page data structures are centrally located in one or more memory blocks and generally occupy approximately 5%-10% of the total available memory when configured. Due to the centralization of per-page data structures, memory blocks may not be physically co-located with their corresponding per-page data structures.
Two general schemes under which memory may be configured are uniform memory access (UMA) and non-uniform memory access (NUMA). Under a UMA scheme, memory blocks are treated as logically contiguous even though the memory blocks may not actually be physically contiguous. As noted above, this scheme allows for programming efficiencies. However, UMA does not distinguish physical proximity of a memory block with a process or processor utilizing that memory block.
NUMA, on the other hand, does account for physical proximity. Under NUMA, some processing efficiencies may be achieved by configuring a memory block such that the memory block is physically proximate with a process or processor utilizing that memory block. In this manner, processing efficiencies may be achieved over UMA configurations. However, at least one disadvantage of current schemes is that per-page data structures for a given memory system are centrally located. Thus, despite accounting for physical proximity of a memory block with a process or processor utilizing that memory block, some associated memory elements may remain physically remote.
Another disadvantage to centrally locating per-page data structures is that when a memory block is removed, a corresponding per-page data structure is not easily recovered for general memory use and, in some examples, may be entirely unavailable for any further memory use until a reboot occurs.